package com.example.check;

import com.example.check.validator.ConditionJointOnlyValidator;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

import  com.example.check.validator.ConditionJointOnlyValidator;

/**
 * 类中两个字段的联合约束：条件结果约束
 * 1. 当condition字段的值满足约束的时候，才会继续比较result的值的约束
 *    [双重校验]
 *
 * @author zhazha
 * @date 2020-07-08
 */
@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = ConditionJointOnlyValidator.class)
@Documented
public @interface ConditionJointOnly {

    String message() default "{message}";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    /**
     * 条件属性的名字
     */
    String conditionName();

    /**
     * 结果属性的名字
     */
    String resultName();

    /**
     * 条件属性的值
     */
    String conditionValue();

    /**
     * 结果属性的值
     * 默认为不为空
     */
    String[] resultValue() default {ConditionJointOnlyValidator.NOT_BLACK};


    @Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @interface List {
        ConditionJointOnly[] value();
    }

}